﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Truong : Form
    {
        private String dir;
        public String Dir
        {
            get { return dir; }
            set { dir = value; }
        }

        private String tentruong;
        public String Tentruong
        {
            get { return tentruong; }
            set { tentruong = value; }
        }

        public Truong(string dir_, string tentruong_)
        {
            Tentruong = tentruong_;
            
            Dir = dir_;
            if (Dir == "specialOption")
            {
            }
            else
            {
                HocSinh hs = new HocSinh();
                hs.Directory = Dir;
            }
            InitializeComponent();
            this.label1.Text = this.label1.Text + Tentruong.ToString();
            
        }

        private void btLoad_Click(object sender, EventArgs e)
        {


            HocSinh hs1 = new HocSinh();
            openFD.ShowDialog();
            String a = openFD.FileName;
            String direct = a.Replace(@"\", @"\\");
            hs1.Directory = direct;
            this.dgvListStudent.DataSource = hs1.ListHocSinh();
            this.Dir = direct;
            this.btDelete.Enabled = true;
            this.btEdit.Enabled = true;
            this.btSearch.Enabled = true;
            this.btAdd.Enabled = true;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (this.txtHoDem.Text == null || this.txtHoDem.Text == "")
            {
                MessageBox.Show("Mời thầy cô nhập Họ đệm của học sinh.");
            }
            else if (this.txtTen.Text == null || this.txtTen.Text == "")
            {
                MessageBox.Show("Mời thầy cô nhập Tên của học sinh.");
            }
            else if (this.txtMonThi.Text == null || this.txtMonThi.Text == "")
            {
                MessageBox.Show("Mời thầy cô chọn Môn Thi của học sinh.");
            }
            else if (this.txtKhoi.Text == null || this.txtKhoi.Text == "")
            {
                MessageBox.Show("Mời thầy cô chọn Khối của học sinh.");
            }
            else if (this.txtLop.Text == null || this.txtLop.Text == "")
            {
                MessageBox.Show("Mời thầy cô nhập Lớp của học sinh.");
            }
            else if (this.txtGVDay.Text == null || this.txtGVDay.Text == "")
            {
                MessageBox.Show("Mời thầy cô nhập Giáo viên dạy của học sinh.");
            }
            else
            {
                try
                {
                    HocSinh hs = new HocSinh(this.txtHoDem.Text
                        , this.txtTen.Text
                        , this.txtNgaySinh.Text
                        , this.txtMonThi.Text
                        , this.txtKhoi.Text
                        , this.txtLop.Text
                        , this.label1.Text
                        , this.txtGVDay.Text
                        , this.txtGVBoiDuong.Text
                        , "", "", "", "", "");
                    hs.Directory = Dir;
                    hs.AddStudent(hs);
                    this.dgvListStudent.DataSource = hs.ListHocSinh();
                }
                catch (Exception a) { }
                finally
                {
                    this.txtHoDem.Text = "";
                    this.txtTen.Text = "";
                    this.txtMonThi.Text = "";
                    this.txtKhoi.Text = "";
                    this.txtLop.Text = "";
                    this.txtGVDay.Text = "";
                    this.txtGVBoiDuong.Text = "";
                }
            }
        }

        private void txtLop_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void btEdit_Click(object sender, EventArgs e)
        {
            int rowIndex = this.dgvListStudent.CurrentCell.RowIndex;

            //get productID
            DataTable dt = (DataTable)this.dgvListStudent.DataSource;
            object[] fields = dt.Rows[rowIndex].ItemArray;
            string sid = fields[0].ToString();

            EditStudent edit = new EditStudent(Dir,sid,this.label1.Text);
            //edit.MdiParent = this.MdiParent;
            edit.FormClosed += new FormClosedEventHandler(child_FormClosed);
            edit.Show();
        }

        public void Truong_Load(object sender, EventArgs e)
        {
            HocSinh hoc = new HocSinh();
            hoc.Directory = Dir;
            try
            {
                this.dgvListStudent.DataSource = hoc.ListHocSinh();
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        private void btDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Khẳng định sẽ xóa học sinh này?", "Xác Nhận Xóa", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int rowIndex = this.dgvListStudent.CurrentCell.RowIndex;
                DataTable dt = (DataTable)this.dgvListStudent.DataSource;
                object[] fields = dt.Rows[rowIndex].ItemArray;
                string sid = fields[0].ToString();
                HocSinh hs = new HocSinh();
                hs.Directory = Dir;
                hs.DeleteStudent(sid);
                this.dgvListStudent.DataSource = hs.ListHocSinh();
            }
            
        }

        private void btSearch_Click(object sender, EventArgs e)
        {
            
            HocSinh hs = new HocSinh();
            hs.Directory = Dir;
            this.dgvListStudent.DataSource = hs.ListHocSinhByName(this.txtHoDem.Text
                , this.txtTen.Text
                , this.txtMonThi.Text
                , this.txtKhoi.Text
                , this.txtLop.Text
                , this.txtGVDay.Text
                , this.txtGVBoiDuong.Text);
        }

        private void btSave_Click(object sender, EventArgs e)
        {
            
            
        }
        void child_FormClosed(object sender, FormClosedEventArgs e)
        {
            //when child form is closed, this code is executed
            HocSinh hoc = new HocSinh();
            hoc.Directory = Dir;
            try
            {
                this.dgvListStudent.DataSource = hoc.ListHocSinh();
            }
            catch (Exception ex)
            {
                ex.ToString();
            }
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        public void Export(DataTable dt, string sheetName)
        {
            //Tạo các đối tượng Excel
            Microsoft.Office.Interop.Excel.Application oExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks oBooks;
            Microsoft.Office.Interop.Excel.Sheets oSheets;
            Microsoft.Office.Interop.Excel.Workbook oBook;
            Microsoft.Office.Interop.Excel.Worksheet oSheet;

            //Tạo mới một Excel WorkBook
            oExcel.Visible = true;
            oExcel.DisplayAlerts = false;
            oExcel.Application.SheetsInNewWorkbook = 1;
            oBooks = oExcel.Workbooks;
            object misValue = System.Reflection.Missing.Value;
            oBooks.Add(misValue);

            oBook = (Microsoft.Office.Interop.Excel.Workbook)(oExcel.Workbooks.Add(Type.Missing));
            oSheets = oBook.Worksheets;
            oSheet = (Microsoft.Office.Interop.Excel.Worksheet)oSheets.get_Item(1);
            oSheet.Name = sheetName;

            // Tạo phần đầu nếu muốn
            //Microsoft.Office.Interop.Excel.Range head = oSheet.get_Range("A1", "C1");
            //head.MergeCells = true;
            //head.Value2 = title;
            //head.Font.Bold = true;
            //head.Font.Name = "Tahoma";
            //head.Font.Size = "18";
            //head.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
            // Tạo tiêu đề cột
            Microsoft.Office.Interop.Excel.Range cl1 = oSheet.get_Range("A1", "A1");
            cl1.Value2 = "ID";
            cl1.ColumnWidth = 10.0;
            Microsoft.Office.Interop.Excel.Range cl2 = oSheet.get_Range("B1", "B1");
            cl2.Value2 = "Họ Đệm";
            cl2.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl3 = oSheet.get_Range("C1", "C1");
            cl3.Value2 = "Tên";
            cl3.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl4 = oSheet.get_Range("D1", "D1");
            cl4.Value2 = "Ngày sinh";
            cl4.ColumnWidth = 20.0;
            Microsoft.Office.Interop.Excel.Range cl5 = oSheet.get_Range("E1", "E1");
            cl5.Value2 = "Môn thi";
            cl5.ColumnWidth = 20.0;
            Microsoft.Office.Interop.Excel.Range cl7 = oSheet.get_Range("G1", "G1");
            cl7.Value2 = "Khối";
            cl7.ColumnWidth = 10.0;
            Microsoft.Office.Interop.Excel.Range cl6 = oSheet.get_Range("F1", "F1");
            cl6.Value2 = "Lớp";
            cl6.ColumnWidth = 10.0;
            Microsoft.Office.Interop.Excel.Range cl8 = oSheet.get_Range("H1", "H1");
            cl8.Value2 = "Trường";
            cl8.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl9 = oSheet.get_Range("I1", "I1");
            cl9.Value2 = "Giáo viên dạy";
            cl9.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl10 = oSheet.get_Range("J1", "J1");
            cl10.Value2 = "Giáo viên bồi dưỡng";
            cl10.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl11 = oSheet.get_Range("K1", "K1");
            cl11.Value2 = "Số báo danh";
            cl11.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl12 = oSheet.get_Range("L1", "L1");
            cl12.Value2 = "Điểm";
            cl12.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl13 = oSheet.get_Range("M1", "M1");
            cl13.Value2 = "Giải";
            cl13.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range cl14 = oSheet.get_Range("N1", "N1");
            cl14.Value2 = "Ghi chú";
            cl14.ColumnWidth = 40.0;
            Microsoft.Office.Interop.Excel.Range rowHead = oSheet.get_Range("A1", "N1");
            rowHead.Font.Bold = true;
            // Kẻ viền
            rowHead.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
            // Thiết lập màu nền
            rowHead.Interior.ColorIndex = 15;
            rowHead.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;


            // Tạo mẳng đối tượng để lưu dữ toàn bồ dữ liệu trong DataTable,
            // vì dữ liệu được được gán vào các Cell trong Excel phải thông qua object thuần.
            object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];

            //Chuyển dữ liệu từ DataTable vào mảng đối tượng
            for (int r = 0; r < dt.Rows.Count; r++)
            {
                DataRow dr = dt.Rows[r];
                for (int c = 0; c < dt.Columns.Count; c++)
                {
                    arr[r, c] = dr[c];
                }
            }

            //Thiết lập vùng điền dữ liệu
            int rowStart = 2;
            int columnStart = 1;

            int rowEnd = rowStart + dt.Rows.Count - 1;
            int columnEnd = dt.Columns.Count;

            // Ô bắt đầu điền dữ liệu
            Microsoft.Office.Interop.Excel.Range c1 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowStart, columnStart];
            // Ô kết thúc điền dữ liệu
            Microsoft.Office.Interop.Excel.Range c2 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnEnd];
            // Lấy về vùng điền dữ liệu
            Microsoft.Office.Interop.Excel.Range range = oSheet.get_Range(c1, c2);

            //Điền dữ liệu vào vùng đã thiết lập
            range.Value2 = arr;

            // Kẻ viền
            range.Borders.LineStyle = Microsoft.Office.Interop.Excel.Constants.xlSolid;
            // Căn giữa cột STT
            Microsoft.Office.Interop.Excel.Range c3 = (Microsoft.Office.Interop.Excel.Range)oSheet.Cells[rowEnd, columnStart];
            Microsoft.Office.Interop.Excel.Range c4 = oSheet.get_Range(c1, c3);
            oSheet.get_Range(c3, c4).HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
            oBook.SaveAs("C:\\Database\\ExportedData.xls", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            oBook.Close(true, misValue, misValue);
            oExcel.Quit();

            releaseObject(oSheets);
            releaseObject(oBook);
            releaseObject(oExcel);

        }
        private void releaseObject(object obj)
        {
            try
            {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
                obj = null;
            }
            catch (Exception ex)
            {
                obj = null;
                MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
            }
            finally
            {
                GC.Collect();
            }
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            DataTable dt = (DataTable)this.dgvListStudent.DataSource;
            Export(dt, "HocSinh");
        }
    }
}
